/**
 * author:vesper.z
 * date: 2024  13:49
 * class: Test06
 * description：继承
 * kotlin中所有的类都继承该Any类，它是所有类的超类。
 *
 **/
class Test06 {

}

/**
 * 构造函数
 */
//如果一个类要被继承，使用open关键字进行修饰。
open class Base1(title: String,content:String){
    open fun foo(){
        println("Base1")
    }
}
//如果子类有主构造函数，则基类必须在主构造函数中立即初始化
class BaseImp:Base1( title = "继承", content = "内容"){
    override fun foo() {
        println("BaseImp")
    }
}

/**
 * 子类没有主构造函数
 *
 * 如果子类没有主构造函数，则必须在每一个二级构造函数中用 super 关键字初始化基类，或者在代理另一个构造函数。
 * 初始化基类时，可以调用基类的不同构造方法。
 */

/**
 * 重写
 * open 类中使用open标记的方法可以被重写
 */
open class Animal{
    open var color:String = "black"
    open fun run(){}//允许子类重写
    open fun  eat(){}
}

class Dog:Animal(){
    override var color: String//重写属性
        get() = super.color
        set(value) {}
    override fun run() { // 重写方法
     println("Dog run!")
    }
    override fun eat() {
        println("Dog eat!")
    }
}

fun main(args: Array<String>) {
    var dog = Dog()
    dog.run()
    dog.eat()

    var baseImp = BaseImp()
    baseImp.foo()
}